Lab 4 - Synthesis -- Part 2

Sequential circuits

 

Цел

 

Придобиване на практически опит за работа с програма за логически синтез.

Задание

Да се извърши логически синтез на последователни и синхронни схеми. Да се анализират резултатите от синтеза -- схеми, бързодействие, използвани ресурси.

 

 

Указания

 

При синтеза да се използват FPGA интегрални схеми от фамилията Virtex на фирмата Xilinx.

За анализ на схемите използвайте резултатите преди архитектурната оптимизация.

За анализ на бързодействието и необходимите ресурси използвайте оптимизираните резултати.
   

 

Задача 4 -- Синтез на тригери управлявани по фронт

На фигури 4.1 и 4.2 са показани алтернативни описания на тригер управляван по фронт с логическо ИЛИ на входа за данни (файловете са dff_ors_sens.vhd и dff_ors_wait.vhd). Синтезирайте тези модели и сравнете получените схемни реализации. Има ли разлики между тях? 

Фигура 4.1 -- Модел на тригер -- списък на чувствителност


library ieee;
use ieee.std_logic_1164.all;

entity dff_or is 
        port (a, b, clk: in std_logic;
                 q: out std_logic);
end dff_or;

architecture sensitivity_list of dff_or is
begin

process (clk) -- clock name is in sensitivity list
begin
    if rising_edge(clk) then
        q <= a or b;
    end if;
end process;

end sensitivity_list ;

 

Фигура 4.2 -- Модел на тригер -- оператор wait


library ieee;
use ieee.std_logic_1164.all;

entity dff_or1 is 
        port (a, b, clk: in std_logic;
                 q: out std_logic);
end dff_or1;


architecture wait_statement of dff_or1 is
begin

process  -- note the absence of a sensitivity list.
begin
--  the process waits here until the condition becomes true
    wait until rising_edge(clk);
    q <= a or b;
end process;

end wait_statement ;

 

Задача 5 -- Синтез на тригери с асинхронни и синхронни SET/RESET входове

На фигури 5.1 и 5.2 са показани модели на тригери управлявани по фронт със синхронни и асинхронни входове за установяване в "0" и "1" (файловете са dff1.vhd и dff2.vhd). Синтезирайте тези модели и сравнете получените схемни реализации. 

Фигура 5.1 -- Модел на тригер -- асинхронен set/reset


library ieee;
use ieee.std_logic_1164.all;

entity dff1 is 
    port (data, clk, reset, set : in std_logic;
             qrs: out std_logic);
end dff1;

architecture async_set_reset of dff1 is
begin
    setreset: process (clk, reset, set)
    begin
            if reset = '1' then
                qrs <= '0';
            elsif set = '1' then
                qrs <= '1';
            elsif rising_edge(clk) then
                qrs <= data;
            end if;
    end process setreset;
end async_set_reset;

 

Фигура 5.2 -- Модел на тригер -- синхронен set/reset


library ieee;
use ieee.std_logic_1164.all;

entity dff2 is 
    port (data, clk, reset, set : in std_logic;
             qrs: out std_logic);
end dff2;

architecture sync_set_reset of dff2 is
begin
setreset: process (clk)
begin
    if rising_edge(clk) then
        if reset = '1' then
            qrs <= '0';
        elsif set = '1' then
            qrs <= '1';
        else
            qrs <= data;
        end if;
    end if;
end process setreset;
end sync_set_reset;

 

Задача 6 -- Синтез на тригери управлявани по ниво

На фигури 6.1 и 6.2 са показани модели на тригер управляван по ниво и на логическа функция с разрешаване на изхода (файловете са or_latch.vhd и or_gated.vhd). Синтезирайте тези модели и обяснете разликите между получените схемни реализации. 

Фигура 6.1 -- Модел на тригер управляван по ниво


library ieee;
use ieee.std_logic_1164.all;
entity or_latch is
	port (a, b, ena : in std_logic ;
	q: out std_logic );
end or_latch;

architecture behave of or_latch is
begin

process (ena, a, b)
begin
	if ena = '1' then
		q <= a or b;
	end if;
end process ;

end behave;
 

Фигура 6.2 -- Модел на логическа функция с разрешаване на изхода


library ieee;
use ieee.std_logic_1164.all;
entity or_gated is
	port (a, b, ena : in std_logic ;
	q: out std_logic );
end or_gated;

architecture behave of or_gated is
begin

process (ena, a, b)
begin
	if ena = '1' then
		q <= a or b;
	else
		q <= '0';
	end if;
end process ;

end behave;

 

Задача 7 -- Синтез на крайни автомати

Като използвате крайния автомат на управляващата логика на хронометър разработен в упражнение 3-3, синтезирайте две схемни реализации - с двоично кодиране и кодиране с "гореща единица". Сравнете ресурсите необходими за двете реализации.

 

Указание

 

Избора на кодирането на състоянията на крайния автомат се задава от менюто:

Synthesis -> Options -> Project:

One hot или Binary